<template>
	<view>
		<view class="uni-header">
			<view class="uni-group">
				<!-- 显示标题 -->
				<view class="uni-title">{{ $t('demo.icons.title') }}（iconfont）</view>
				<!-- 显示描述 -->
				<view class="uni-sub-title">{{ $t('demo.icons.describle') }}</view>
			</view>
		</view>
		<view class="uni-container">
			<view class="icons">
				<!-- 循环显示图标 -->
				<view v-for="(item, index) in icons" :key="index" class="icon-item pointer">
					<view @click="setClipboardData('tag', item.font_class)" :class="['iconfont', 'icon-' + item.font_class]"></view>
					<text @click="setClipboardData('class', item.font_class)" class="icon-text">{{ item.font_class }}</text>
				</view>
			</view>
		</view>
		<!-- 在非H5环境下显示fix-window组件 -->
		<!-- #ifndef H5 -->
		<fix-window v-if="fixWindow" />
		<!-- #endif -->
	</view>
</template>

<script setup>
// 导入名为 "icons" 的模块，路径为 './iconfont.js'
import icons from './iconfont.js';

const props = defineProps({
	// 属性：tag
	tag: {
		// 类型为布尔型
		type: Boolean,
		// 默认值为 true
		default: true
	},
	// 属性：fixWindow
	fixWindow: {
		// 类型为布尔型
		type: Boolean,
		// 默认值为 true
		default: true
	}
});

// 方法：setClipboardData，参数为 type 和 icon
const setClipboardData = (type, icon) => {
	// 定义变量 data，值为 'icon-' 加上 icon 参数
	let data = 'iconfont icon-' + icon;

	// 如果 this.tag 为真且 type 等于 'tag'
	if (props.tag && type === 'tag') {
		// 将 data 的值修改为带有 class 属性的字符串
		data = '<view class="' + data + '"></view>';
	}

	// 调用 uni.setClipboardData 函数
	uni.setClipboardData({
		// 数据为变量 data 的值
		data,

		// 成功回调函数
		success(res) {
			// 调用 uni.showToast 函数
			uni.showToast({
				// 图标为 'none'
				icon: 'none',
				// 提示信息为 '复制 ' 加上 data 的值，再加上 ' 成功！'
				title: '复制 ' + data + ' 成功！'
			});
		},

		// 失败回调函数
		fail(res) {
			// 调用 uni.showModal 函数
			uni.showModal({
				// 弹窗内容为 '复制 ' 加上 data 的值，再加上 ' 失败！'
				content: '复制 ' + data + ' 失败！',
				// 不显示取消按钮
				showCancel: false
			});
		}
	});
};
</script>

<style lang="scss">
/* #ifndef H5 */
page {
	padding-top: 85px;
}
/* #endif */
.icons {
	display: flex;
	flex-direction: row;
	flex-wrap: wrap;
}

.icon-item {
	display: flex;
	width: 16.6%;
	height: 120px;
	font-size: 30px;
	text-align: center;
	justify-content: center;
	align-items: center;
	flex-direction: column;
}
.icon-item .iconfont {
	display: block;
	font-weight: 400;
	font-size: 40px;
	margin: 10px auto;
	color: #333;
	transition: font-size 0.25s linear, width 0.25s linear;
}

.icon-item:hover,
.icon-item:hover .icon-text {
	color: $uni-color-primary;
}

.icon-text {
	color: #99a9bf;
	font-size: 12px;
	text-align: center;
	height: 1em;
	line-height: 1em;
	margin-top: 15px;
}

/* #ifdef H5 */
@media only screen and (max-width: 500px) {
	.icon-item {
		width: 33.3%;
	}
}
/* #endif */
</style>
